package com.hk.shop.page;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

import com.hk.shop.page.PageOrder.Direction;





/**
 * @ClassName   Page
 * @author 		Harking
 * @date 		Mar 23, 2017 2:45:41 PM
 * @version 	1.0
 */
public class Page<T> implements Serializable {

	private static final long serialVersionUID = -2053800594583879853L;

	/** 内容 */
	private final List<T> contentList = new ArrayList<T>();

	/** 总记录数 */
	private final long totalRows;
	
	/**总页数*/
	@SuppressWarnings("unused")
	private final int totalPages;

	/** 分页信息 */
	private final PageInfo pageInfo;

	/**
	 * 初始化一个新创建的Page对象
	 */
	public Page() {
		this.totalRows = 0L;
		this.totalPages = 0;
		this.pageInfo = new PageInfo();
	}

	/**
	 * @param content
	 *            内容
	 * @param total
	 *            总记录数
	 * @param pageInfo
	 *            分页信息
	 */
	public Page(List<T> contentList, long totalRows, PageInfo pageInfo) {
		//为什么不是
		//this.contentList = contentList;
		//当需要把多个List 实例放到一起的时候，必须使用List.addAll()方法。
		this.contentList.addAll(contentList);
		this.totalRows = totalRows;
		this.pageInfo = pageInfo;
		
		this.totalPages = getTotalPages();
	}

	/**
	 * 获取页码
	 * 
	 * @return 页码
	 */
	public int getPageNumber() {
		return pageInfo.getPageNumber();
	}

	/**
	 * 获取每页记录数
	 * 
	 * @return 每页记录数
	 */
	public int getPageSize() {
		return pageInfo.getPageSize();
	}

	/**
	 * 获取搜索属性
	 * 
	 * @return 搜索属性
	 */
	public String getSearchProperty() {
		return pageInfo.getSearchProperty();
	}

	/**
	 * 获取搜索值
	 * 
	 * @return 搜索值
	 */
	public String getSearchValue() {
		return pageInfo.getSearchValue();
	}

	/**
	 * 获取排序属性
	 * 
	 * @return 排序属性
	 */
	public String getOrderProperty() {
		return pageInfo.getOrderProperty();
	}

	/**
	 * 获取排序方向
	 * 
	 * @return 排序方向
	 */
	public Direction getOrderDirection() {
		return pageInfo.getOrderDirection();
	}

	/**
	 * 获取排序
	 * 
	 * @return 排序
	 */
	public List<PageOrder> getOrders() {
		return pageInfo.getOrders();
	}

	/**
	 * 获取筛选
	 * 
	 * @return 筛选
	 */
	public List<PageFilter> getFilters() {
		return pageInfo.getFilters();
	}

	/**
	 * 获取总页数
	 * 
	 * @return 总页数
	 */
	public int getTotalPages() {
		return (int) Math.ceil((double) getTotalRows() / (double) getPageSize());
	}

	/**
	 * 获取内容
	 * 
	 * @return 内容
	 */
	public List<T> getContentList() {
		return contentList;
	}

	/**
	 * 获取总记录数
	 * 
	 * @return 总记录数
	 */
	public long getTotalRows() {
		return totalRows;
	}

	/**
	 * 获取分页信息
	 * 
	 * @return 分页信息
	 */
	public PageInfo getPageInfo() {
		return pageInfo;
	}

}